package com.yq.homework.day20;


/**
 * @author 3307235355@qq.com
 * @since 2022/06/20 19:36
 */
public class Demo02 {
    public static void main(String[] args) {
        Animal a1 = new Animal(12,"小马",65.3);
        Animal a2 = new Animal(12,"小马",65.3);
        Animal a3 = new Animal();
        boolean result = a1.equals(a2);
        boolean result1 = a1.equals(a3);
        System.out.println(result);
        System.out.println(result1);
    }
}

class Animal {
    private int age;
    private String name;
    double price;

    public Animal() {
    }

    public Animal(int age, String name, double price) {
        this.age = age;
        this.name = name;
        this.price = price;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        // if (o == null || this.getClass() != o.getClass()) {
        //     return false;
        // }
        if (!(o instanceof Animal)){
            return false;
        }
        Animal o1 = (Animal) o;
        if (this.age != o1.age) {
            return false;
        }
        if (this.name == null || !(this.name.equals(o1.name))) {
            return false;
        }
        return Double.compare(this.price,o1.price) == 0;
    }


}

// 使用getClass方法比较。  这个比较是比较苛刻的，只有在完全是同一个类型时才会返回true
// 使用instanceof比较。
// 引用 instanceof 类名
//         表示判断引用所指向的对象的具体类型，是否是后面类名的对象或者子类对象，如果是就返回true，如果不是就返回false。
//         这个比较的条件就比较宽松了，可以允许传入子类对象。（当子类对象的父类成员和父类对象相同时,equals方法仍然返回true）
